﻿using System;
using System.Collections.Generic;
using System.Data.OleDb;
using System.Linq;
using System.Web;

namespace FlyingCircusWebIS.Models
{
    public class FormaPagamentoDAO: IFormaPagamentoDAO
    {
        public void Adicionar(FormaPagamento entidade)
        {
            string sqlInserir = "insert into FORMAPAGAMENTO (IdPagamento, Descricao, FlagAtivo) values (seqFormaPagamento.NEXTVAL, ?, ?)";

            // Configura o comando
            OleDbCommand comando = new OleDbCommand();
            comando.Connection = GerenciadorConexao.Conexao;
            comando.CommandText = sqlInserir;

            OleDbParameter pDescricao = new OleDbParameter("Descricao", OleDbType.VarChar);
            pDescricao.Value = entidade.Descricao;
            comando.Parameters.Add(pDescricao);

            OleDbParameter pFlagAtivo = new OleDbParameter("FlagAtivo", OleDbType.VarChar);
            pFlagAtivo.Value = entidade.FlagAtivo;
            comando.Parameters.Add(pFlagAtivo);

            // Insert
            comando.ExecuteNonQuery();
            comando.Dispose();
        }

        public void Atualizar(FormaPagamento entidade)
        {
            string sqlAtualizar = "update FORMAPAGAMENTO set Descricao = ?, FlagAtivo = ? where IdPagamento = ?";

            // Configura o comando
            OleDbCommand comando = new OleDbCommand();
            comando.Connection = GerenciadorConexao.Conexao;
            comando.CommandText = sqlAtualizar;

            OleDbParameter pDescricao = new OleDbParameter("Descricao", OleDbType.VarChar);
            pDescricao.Value = entidade.Descricao;
            comando.Parameters.Add(pDescricao);

            OleDbParameter pFlagAtivo = new OleDbParameter("FlagAtivo", OleDbType.VarChar);
            pFlagAtivo.Value = entidade.FlagAtivo;
            comando.Parameters.Add(pFlagAtivo);

            OleDbParameter pId = new OleDbParameter("IdPagamento", OleDbType.Integer);
            pId.Value = entidade.IdPagamento;
            comando.Parameters.Add(pId);

            // Update
            comando.ExecuteNonQuery();
            comando.Dispose();
        }


        public FormaPagamento BuscarPorId(int id)
        {
            FormaPagamento registro = null;
            string sqlBuscar = "select * from FORMAPAGAMENTO where IdPagamento = " + id;

            // Configura o comando
            OleDbCommand comando = new OleDbCommand();
            comando.Connection = GerenciadorConexao.Conexao;
            comando.CommandText = sqlBuscar;

            // Select
            OleDbDataReader dr = comando.ExecuteReader();
            if (dr.Read())
            {
                registro = ConverterDataReaderParaObj(dr);
            }
            dr.Close();
            comando.Dispose();

            return registro;

        }

        private FormaPagamento ConverterDataReaderParaObj(OleDbDataReader dr)
        {
            FormaPagamento registro = new FormaPagamento();
            registro.IdPagamento = Int32.Parse(dr["IdPagamento"].ToString());
            registro.Descricao = dr["Descricao"].ToString();
            registro.FlagAtivo = dr["FlagAtivo"].ToString();

            return registro;
        }

        public List<FormaPagamento> Listar()
        {
            String sqlConsulta = "select * from FORMAPAGAMENTO";

            // Configura o comando
            OleDbCommand comando = new OleDbCommand();
            comando.Connection = GerenciadorConexao.Conexao;
            comando.CommandText = sqlConsulta;

            // Select
            OleDbDataReader dr = comando.ExecuteReader();

            List<FormaPagamento> registros = new List<FormaPagamento>();
            while (dr.Read())
            {
                FormaPagamento registro = ConverterDataReaderParaObj(dr);
                registros.Add(registro);
            }
            dr.Close();
            comando.Dispose();

            return registros;
        }


        public void AtivarPorId(int id)
        {
            string sqlAtualizar = "update FORMAPAGAMENTO set flagAtivo = 'S' where IdPagamento = " + id;

            // Configura o comando
            OleDbCommand comando = new OleDbCommand();
            comando.Connection = GerenciadorConexao.Conexao;
            comando.CommandText = sqlAtualizar;

            // Update
            comando.ExecuteNonQuery();
            comando.Dispose();

        }

        public void DesativarPorId(int id)
        {
            string sqlAtualizar = "update FORMAPAGAMENTO set flagAtivo = 'N' where IdPagamento = " + id;

            // Configura o comando
            OleDbCommand comando = new OleDbCommand();
            comando.Connection = GerenciadorConexao.Conexao;
            comando.CommandText = sqlAtualizar;

            // Update
            comando.ExecuteNonQuery();
            comando.Dispose();
        }


        public void RemoverPorId(int id)
        {
            string sqlDeletar = "delete FORMAPAGAMENTO where IdPagamento = ?";

            // Configura o comando
            OleDbCommand comando = new OleDbCommand();
            comando.Connection = GerenciadorConexao.Conexao;
            comando.CommandText = sqlDeletar;

            OleDbParameter pId = new OleDbParameter("IdPagamento", OleDbType.VarChar);
            pId.Value = id;
            comando.Parameters.Add(pId);


            // Delete
            comando.ExecuteNonQuery();
            comando.Dispose();
        }
    }
}